import 'dart:io';
import 'dart:math';

import 'package:docx_template/docx_template.dart';

///
/// Read file template.docx, produce it and save
///
void main() async {
  final f = File("report-template.docx");
  final docx = await DocxTemplate.fromBytes(await f.readAsBytes());
  Content content = Content();
  /* 
    Or in the case of Flutter, you can use rootBundle.load, then get bytes
    
    final data = await rootBundle.load('lib/assets/users.docx');
    final bytes = data.buffer.asUint8List();

    final docx = await DocxTemplate.fromBytes(bytes);
  */

  // Load test image for inserting in docx
  final testFileContent = await File('scene.jpg').readAsBytes();

  // final listNormal = ['Foo', 'Bar', 'Baz'];
  // final listBold = ['ooFPlop', 'raB', 'zaB'];

  // final contentList = <Content>[];

  // final b = listBold.iterator;
  // for (var n in listNormal) {
  //   b.moveNext();

  //   final c = PlainContent("value")
  //     ..add(TextContent("normal", n))
  //     ..add(TextContent("bold", b.current));
  //   contentList.add(c);
  // }
  // content
  //   ..add(TextContent("header", "配电电缆谐波分量带电检测终端"))
  //   ..add(TextContent("footer", "武汉三江中电科技有限责任公司"))
  //   ..add(TextContent("docname", "检测报告"))
  //   ..add(TextContent("passport", "Passport NE0323 4456673"))
  //   ..add(TableContent("table", [
  //     RowContent()
  //       ..add(TextContent("key1", "Paul"))
  //       ..add(TextContent("key2", "Viberg"))
  //       ..add(TextContent("key3", "Engineer"))
  //       ..add(ImageContent('img', testFileContent)),
  //     RowContent()
  //       ..add(TextContent("key1", "Alex"))
  //       ..add(TextContent("key2", "Houser"))
  //       ..add(TextContent("key3", "CEO & Founder"))
  //       ..add(ListContent("tablelist", [
  //         TextContent("value", "Mercedes-Benz C-Class S205"),
  //         TextContent("value", "Lexus LX 570")
  //       ]))
  //       ..add(ImageContent('img', testFileContent))
  //   ]))
  //   ..add(ListContent("list", [
  //     TextContent("value", "Engine")
  //       ..add(ListContent("listnested", contentList)),
  //     TextContent("value", "Gearbox"),
  //     TextContent("value", "Chassis")
  //   ]))
  //   ..add(ListContent("plainlist", [
  //     PlainContent("plainview")
  //       ..add(TableContent("table", [
  //         RowContent()
  //           ..add(TextContent("key1", "Paul"))
  //           ..add(TextContent("key2", "Viberg"))
  //           ..add(TextContent("key3", "Engineer")),
  //         RowContent()
  //           ..add(TextContent("key1", "Alex"))
  //           ..add(TextContent("key2", "Houser"))
  //           ..add(TextContent("key3", "CEO & Founder"))
  //           ..add(ListContent("tablelist", [
  //             TextContent("value", "Mercedes-Benz C-Class S205"),
  //             TextContent("value", "Lexus LX 570")
  //           ]))
  //       ])),
  //     PlainContent("plainview")
  //       ..add(TableContent("table", [
  //         RowContent()
  //           ..add(TextContent("key1", "Nathan"))
  //           ..add(TextContent("key2", "Anceaux"))
  //           ..add(TextContent("key3", "Music artist"))
  //           ..add(ListContent(
  //               "tablelist", [TextContent("value", "Peugeot 508")])),
  //         RowContent()
  //           ..add(TextContent("key1", "Louis"))
  //           ..add(TextContent("key2", "Houplain"))
  //           ..add(TextContent("key3", "Music artist"))
  //           ..add(ListContent("tablelist", [
  //             TextContent("value", "Range Rover Velar"),
  //             TextContent("value", "Lada Vesta SW Sport")
  //           ]))
  //       ])),
  //   ]))
  //   ..add(ListContent("multilineList", [
  //     PlainContent("multilinePlain")
  //       ..add(TextContent('multilineText', 'line 1')),
  //     PlainContent("multilinePlain")
  //       ..add(TextContent('multilineText', 'line 2')),
  //     PlainContent("multilinePlain")
  //       ..add(TextContent('multilineText', 'line 3'))
  //   ]))
  //   ..add(TextContent('multilineText2', 'line 1\nline 2\n line 3'))
  //   ..add(ImageContent('img', testFileContent));

  content.add(TextContent("testDateYmd", "2024年04月10日"));
  content.add(TextContent("enterpriseName", "朝阳供电公司"));
  content.add(TextContent("lineNumber", "124-0001"));
  content.add(TextContent("substationName", "朝阳1号变电站"));
  content.add(TextContent("lineName", "北京朝阳区国际学校1号线路"));
  content.add(TextContent("cableWellName", "1号电缆井"));
  content.add(TextContent("ratedVoltage", "10kV"));
  content.add(TextContent("testLocation", "北京朝阳区哈罗英国学校"));
  content.add(TextContent("testDate", "2024/04/09"));
  content.add(TextContent("testTime", "10:06 AM"));
  content.add(TextContent(
      "testConclusion", "根据现场检测结果，北京朝阳区哈罗英国学校的北京朝阳区国际学校1号线路，存在缺陷96%"));
  for (int i = 2; i <= 50; i++) {
    content.add(TextContent("value$i", "${Random().nextInt(1000)}p"));
  }
  content.add(ImageContent("img", testFileContent));
  final docGenerated = await docx.generate(content);
  final fileGenerated = File('generated.docx');
  if (docGenerated != null) await fileGenerated.writeAsBytes(docGenerated);
}
